package com.lyy.entity.Util;

import com.alibaba.excel.EasyExcel;
import com.lyy.entity.excel.UserExcel;
import com.lyy.result.Result;
import lombok.SneakyThrows;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.List;

/**
 * @author Liangyaoyun
 */
public class ExcelUtil {
    @SneakyThrows
    public static void writeExcel(HttpServletResponse resp,
                                  List<UserExcel> userExcels,
                                  String fileName) {
        try {
            // 这里URLEncoder.encode可以防止中文乱码
            fileName = URLEncoder.encode(fileName, StandardCharsets.UTF_8);
            // 设置响应MIME类型为Excel文件下载类型
            resp.setContentType("application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8");
            // 设置下载的文件名
            resp.setHeader("Content-disposition", "attachment;filename=" + fileName);
            // 将数据写入Excel文件: 响应流，数据泛型
            EasyExcel.write(resp.getOutputStream(), UserExcel.class)
                    // 设置Sheet标题
                    .sheet("sheet001")
                    // 设置数据并执行写出
                    .doWrite(userExcels);
        } catch (IOException e) {
            // 重置响应对象
            resp.reset();
            // 设置响应MIME类型为JSON
            resp.setContentType("application/json;charset=utf-8");
            resp.getWriter().println(Result.fail( "下载文件失败: " + e.getMessage()));
        }
    }
}
